package com.tuzhi.common.helper;

import java.util.HashMap;
import java.util.Map;

import com.tuzhi.common.domain.TzCacheBO;
import org.apache.commons.lang3.StringUtils;

public class TzCacheHelper<T> {
    //有效时长3600秒
    //final static long validTime = 3600 * 1000;
    final static long validTime = 5 * 1000;

    Map<String, TzCacheBO> map = new HashMap<>();


    public TzCacheHelper() {
    }

    /**
     * 获取有效的数据
     * @param key
     * @return String
     */
    public String getDataByKey(String key) {
        TzCacheBO ipCache = map.get(key);
        if (ipCache != null && isValid(ipCache)) {
            return ipCache.getDataStr();
        }
        return null;
    }

    /**
     * 获取有效的数据
     * @param key
     * @return Object
     */
    public T getObjectByKey(String key) {
        TzCacheBO ipCache = map.get(key);
        if (ipCache != null && isValid(ipCache)) {
            return (T) ipCache.getObj();
        }
        return null;
    }


    private boolean isValid(TzCacheBO ipCache) {
        return (System.currentTimeMillis() - ipCache.getLastUPdateTimeMillis()) < validTime;
    }

    /**
     * 添加到缓存
     * @param key
     * @param json
     */
    public void addCache(String key, String json) {
        
        if (StringUtils.isBlank(key) || StringUtils.isBlank(json)) {
            return;
        }
        map.put(key, new TzCacheBO(key, json));
    }

    /**
     * 添加到缓存
     * @param key
     * @param json
     * @param second 缓存多久，单位秒
     */
    public void addCache(String key, String json, long second) {
        if (StringUtils.isBlank(key) || StringUtils.isBlank(json)) {
            return;
        }
        long l = System.currentTimeMillis() - validTime + (second * 1000);
        map.put(key, new TzCacheBO(key, json, l));
    }

    public void addCache(String key, String json, Object obj) {
        if (StringUtils.isBlank(key) || StringUtils.isBlank(json) || obj == null) {
            return;
        }
        map.put(key, new TzCacheBO(key, json, obj));
    }

    /**
     * 添加到缓存
     * @param key
     * @param json
     * @param second 缓存多久，单位秒
     */
    public void addCache(String key, String json, Object obj, long second) {
        if (StringUtils.isBlank(key) || StringUtils.isBlank(json) || obj == null) {
            return;
        }
        long l = System.currentTimeMillis() - validTime + (second * 1000);
        map.put(key, new TzCacheBO(key, json, obj, l));
    }
}
